package cloud.pangui.core.utils;

import java.util.*;

/**
 * @Auther hepangui
 * @Date 2020/11/5 0005
 */
public class CollectionUtils {

	/**
	 * 简单获取一个list
	 * @param ts
	 * @param <T>
	 * @return
	 */
	public static <T> List<T> toList(T... ts) {
		List<T> list = new ArrayList<>(ts.length);
		for (T t : ts) {
			list.add(t);
		}
		return list;
	}

	/**
	 * 简单获取一个Set
	 * @param ts
	 * @param <T>
	 * @return
	 */
	public static <T> Set<T> toSet(T... ts) {
		Set<T> set = new HashSet<>(ts.length);
		for (T t : ts) {
			set.add(t);
		}
		return set;
	}

	/**
	 * 集合转set
	 * @param ts
	 * @param <T>
	 * @return
	 */
	public static <T> Set<T> toSet(Collection<T> ts) {
		if(ts == null){
			return new HashSet<>();
		}
		Set<T> set = new HashSet<>(ts.size());
		for (T t : ts) {
			set.add(t);
		}
		return set;
	}

	/**
	 * 非空判断
	 * @param collection
	 * @return
	 */
	public static boolean isEmpty(Collection collection){
		return collection == null || collection.isEmpty();
	}

	/**
	 * 截取list 含前不含后
	 * 替代list的sublist方法，因为list的subList返回的是一个不能修改的视图
	 *
	 * @param list  原始lsit
	 * @param start 开始位，包含
	 * @param end   结束位，不包含
	 * @param <T>
	 * @return
	 */
	public static <T> List<T> subList(List<T> list, int start, int end) {
		if (list == null || list.size() == 0) {
			return list;
		}
		if (start > list.size() || end > list.size()) {
			throw new IndexOutOfBoundsException();
		}
		List list1 = new ArrayList();
		int i = 0;
		for (T t : list) {
			if (i >= end) {
				break;
			}
			if (i >= start) {
				list1.add(t);
			}
			i++;
		}
		return list1;
	}

	public static void main(String[] args) {
		List list = CollectionUtils.toList("a","b","c","d");
		List list1 = subList(list, 0, 4);
		System.out.println(list1);
	}
}
